package client;

import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertTrue;

import javax.ejb.EJBException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import marionito.domaine.Jeton;
import marionito.domaine.Joueur;
import marionito.domaine.Partie;
import marionito.usecases.GestionJoueurs;
import marionito.usecases.GestionParties;

import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class TestPartieNG_marionito {
	private static GestionParties gp;
	private static GestionJoueurs gj;

	private String[] j1 = { "md", "mi", "Michel", "Debacker",
			"michel.debacker@ipl.be" };
	private String[] j2 = { "el", "em", "Emmeline", "Leconte",
			"emmeline.leconte@ipl.be" };
	private String[] j3 = { "oc", "ol", "Olivier", "Choquet",
			"olivier.choquet@ipl.be" };

	private static Joueur joueur1, joueur2, joueur3;
	private Partie partie;

	@BeforeClass
	public void BeforeClass() {
		try {
			Context jndi = new InitialContext();
			gp = (GestionParties) jndi
					.lookup("ejb:marionitoEAR/marionitoEJB/GestionPartiesImpl!marionito.usecases.GestionParties");
			gj = (GestionJoueurs) jndi
					.lookup("ejb:marionitoEAR/marionitoEJB/GestionJoueursImpl!marionito.usecases.GestionJoueurs");
		} catch (NamingException e) {
			e.printStackTrace();
		}

		gp.creerJetons();
		partie = gp.creerPartie("une partie");
		assertNotNull(partie);
	}

	@Test
	public void creerPartieTest() {
		assertNotNull(gp.creerPartie("Partie de test"));
		assertNull(gp.creerPartie("Partie de test"));
		try {
			gp.creerPartie("");
			assertTrue(false);
		} catch (EJBException e) {
			assertTrue(true);
		}

	}

	@Test
	public void rejoindrePartie() {
		partie = gp.rejoindrePartie("une partie", j1[0]);
		assertNotNull(partie);
		assertEquals(partie.getJoueursPartie().size(), 1);
	}

	
	
	@Test(dependsOnMethods = "creerPartieTest")
	public void annulerPartieTest() {
		gp.annulerPartie("une partie");
	}
	
	
	@Test
	public void listeCasesTest() {
		assertNull(gp.jetonSuivant(""));
	}
	
	@Test
	public void ajouterJetonTest() {
		joueur1 = new Joueur("dd", "dd", "dd", "dd", "dd@dd.dd");
		Jeton jeton = new Jeton(1);
		
		assertNull(gp.ajouterJeton(joueur1, "", jeton, "1"));
	}
	
	@Test
	public void recherchePartieTest() {
		assertNull(gp.recherchePartie("non existante"));
	}
}
